package lx5;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;

/*
服务器只能处理一个客户端请求，接收完一个图片之后，服务器就关闭了。
优化方案一：
使用循环
弊端：
第一个用户正在上传数据，第二个用户就来访问了，此时第二个用户是无法成功上传的。
所以，使用多线程改进
优化方案二：
每来一个用户，就开启多线程处理
 */
//客户端：将本地文件上传到服务器。接收服务器的反馈。
//服务器：接收客户端上传的文件，上传完毕之后给出反馈。
public class Client {
    public static void main(String[] args) throws IOException {
    /*
        流程:1.用FileInputStream读取本地文件
        2.读到内存中以后，再用网络的io传递给服务器
        3.服务器接收到文件以后，用FileOutputStream写入到本地
        4.当写入完毕以后，服务器给出反馈---- 写入成功
         */

        //1.创建客服端对象连接服务器
        Socket socket = new Socket("127.0.0.1", 10000);

        //2.读取本地的文件向服务器写入文件数据
        //文件大我们用缓冲输入流读取本地文件中的数据
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("..\\day56\\Client\\aa.jpg"));
        OutputStream os = socket.getOutputStream();
        //开始边读边写
        int len;
        byte[] bytes = new byte[1024];
        while ((len = bis.read(bytes)) != -1) {
            os.write(bytes, 0, len);
        }
        //往服务器写一个结束标记

        socket.shutdownOutput();
        //关闭流
        socket.close();//客服端和服务器的通道关闭，通道中的流也随着关闭
    }
}
